package client;

import facade.DesarrolloHumanoFacade;
import facade.exception.AlreadyUsuarioRegistradoExistsException;
import facade.exception.NotActiveFormularioFoundException;
import java.util.ArrayList;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import util.JsfUtil;
import util.Lista;
import valueObject.AcompananteVO;
import valueObject.FormularioVO;
import valueObject.UsuarioRegistradoVO;

@ManagedBean(name="formularioDeRegistroBean")
@SessionScoped
public class FormularioDeRegistroBean {

    @EJB
    private DesarrolloHumanoFacade desarrolloHumanoFacade;
    
    private FormularioVO formularioVO;
    
    private UsuarioRegistradoVO usuarioRegistradoVO;
        
    public FormularioDeRegistroBean() {
        usuarioRegistradoVO = new UsuarioRegistradoVO();
        usuarioRegistradoVO.setGenero("masculino");
        usuarioRegistradoVO.setEstaAceptado(false);
        usuarioRegistradoVO.setEstaConfirmado(false);
        usuarioRegistradoVO.setAcompanantes(new ArrayList<AcompananteVO>());
    }
    
    public boolean hayUnFormularioActivo(){
        try {
            setFormularioVO(getDesarrolloHumanoFacade().hayUnFormularioActivo());
            usuarioRegistradoVO.setFormulario(formularioVO);
            return true;
        } catch (NotActiveFormularioFoundException ex) {
            return false;
        }
    }
    
    public String registrarUsuario(){
        try {
            getDesarrolloHumanoFacade().registrarUsuarioFinal(usuarioRegistradoVO);
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("formularioDeRegistroBean");
            return "success";
        } catch (AlreadyUsuarioRegistradoExistsException ex) {
            return "error";
        }
    }

    public FormularioVO getFormularioVO() {
        return formularioVO;
    }

    public void setFormularioVO(FormularioVO formularioVO) {
        this.formularioVO = formularioVO;
    }
    
    public ArrayList<Integer> obtenerLista(){
        return Lista.generarLista(formularioVO.getCantidadDeAcompanante());
    }

    public UsuarioRegistradoVO getUsuarioRegistradoVO() {
        return usuarioRegistradoVO;
    }

    public void setUsuarioRegistradoVO(UsuarioRegistradoVO usuarioRegistradoVO) {
        this.usuarioRegistradoVO = usuarioRegistradoVO;
    }
    
    public static SelectItem[] listaDeTiposDeDocumentos() {
        int i=0;
        SelectItem[] items = new SelectItem[6];
        items[i++] = new SelectItem("cc", "CC");
        items[i++] = new SelectItem("ce", "CE");
        items[i++] = new SelectItem("ti", "TI");
        items[i++] = new SelectItem("nuip", "NUIP");
        items[i++] = new SelectItem("registroCivil", "Registro Civil");
        items[i++] = new SelectItem("pasaporte", "Pasaporte");
        return items;
    }
    
    public static SelectItem[] listaDeParentescos() {
        int i=0;
        SelectItem[] items = new SelectItem[4];
        items[i++] = new SelectItem("hijo", "Hijo(a)");
        items[i++] = new SelectItem("madre", "Madre");
        items[i++] = new SelectItem("padre", "Padre");
        items[i++] = new SelectItem("conyuge", "Conyuge");
        return items;
    }
    
    public static SelectItem[] listaDeGeneros() {
        int i=0;
        SelectItem[] items = new SelectItem[2];
        items[i++] = new SelectItem("masculino", "Masculino");
        items[i++] = new SelectItem("femenino", "Femenino");
        return items;
    }
    
    public static SelectItem[] listaDeDependencias(){
        int i=0;
        SelectItem[] items = new SelectItem[42];
        items[i++] = new SelectItem("Centro Cultural", "Centro Cultural");
        items[i++] = new SelectItem("Centro De Lenguas", "Centro De Lenguas");
        items[i++] = new SelectItem("Centro Regional Valle De Tenza", "Centro Regional Valle De Tenza");
        items[i++] = new SelectItem("Departamento De Lenguas", "Departamento De Lenguas");
        items[i++] = new SelectItem("Departamento De Matematicas", "Departamento De Matematicas");
        items[i++] = new SelectItem("Departamento De Ciencias Sociales", "Departamento De Ciencias Sociales");
        items[i++] = new SelectItem("Departamento De Biología", "Departamento De Biología");
        items[i++] = new SelectItem("Departamento De Física", "Departamento De Física");
        items[i++] = new SelectItem("Departamento De Quimica", "Departamento De Quimica");
        items[i++] = new SelectItem("Departamento De Psicopedagogía", "Departamento De Psicopedagogía");
        items[i++] = new SelectItem("Departamento De Tecnologia", "Departamento De Tecnologia");
        items[i++] = new SelectItem("Departamento De Educacion Musical", "Departamento De Educacion Musical");
        items[i++] = new SelectItem("Departamento De Departamento De Postgrado", "Departamento De Departamento De Postgrado");
        items[i++] = new SelectItem("Division Bienestar Universitario", "Division Bienestar Universitario");
        items[i++] = new SelectItem("Division Gestion De Sistemas De Informacion", "Division Gestion De Sistemas De Informacion");
        items[i++] = new SelectItem("División Servicios Generales", "División Servicios Generales");
        items[i++] = new SelectItem("Division Personal", "Division Personal");
        items[i++] = new SelectItem("División Asesorias Y Extensión", "División Asesorias Y Extensión");
        items[i++] = new SelectItem("División Biblioteca Y Recursos Bibliograficos", "División Biblioteca Y Recursos Bibliograficos");
        items[i++] = new SelectItem("Division Admisiones Y Registro", "Division Admisiones Y Registro");
        items[i++] = new SelectItem("Division Financiera", "Division Financiera");
        items[i++] = new SelectItem("Division Gestion De Proyectos", "Division Gestion De Proyectos");
        items[i++] = new SelectItem("Division Recursos Educativos", "Division Recursos Educativos");
        items[i++] = new SelectItem("Escuela Maternal", "Escuela Maternal");
        items[i++] = new SelectItem("Facultad Bellas Artes", "Facultad Bellas Artes");
        items[i++] = new SelectItem("Facultad Ciencia Y Tecnologia", "Facultad Ciencia Y Tecnologia");
        items[i++] = new SelectItem("Facultad Educacion", "Facultad Educacion");
        items[i++] = new SelectItem("Facultad Educacion Física", "Facultad Educacion Física");
        items[i++] = new SelectItem("Facultad Humanidades", "Facultad Humanidades");
        items[i++] = new SelectItem("Grupo Contratacion", "Grupo Contratacion");
        items[i++] = new SelectItem("Grupo Comunicaciones Corporativas", "Grupo Comunicaciones Corporativas");
        items[i++] = new SelectItem("Instituto Pedagogico Nacional", "Instituto Pedagogico Nacional");
        items[i++] = new SelectItem("Oficina Control Interno", "Oficina Control Interno");
        items[i++] = new SelectItem("Oficina Control Interno Disciplinario", "Oficina Control Interno Disciplinario");
        items[i++] = new SelectItem("Oficina Desarrollo Y Planeacion", "Oficina Desarrollo Y Planeacion");
        items[i++] = new SelectItem("Oficina Juridica", "Oficina Juridica");
        items[i++] = new SelectItem("Oficina Relaciones Inter Institucionales", "Oficina Relaciones Inter Institucionales");
        items[i++] = new SelectItem("Rectoria", "Rectoria");
        items[i++] = new SelectItem("Rectoria - Secretaria General", "Rectoria - Secretaria General");
        items[i++] = new SelectItem("Vicerrectoria Academica", "Vicerrectoria Academica");
        items[i++] = new SelectItem("Vicerrectoria Administrativa Y Financiera", "Vicerrectoria Administrativa Y Financiera");
        items[i++] = new SelectItem("Vicerrectoria Gestion Universitaria", "Vicerrectoria Gestion Universitaria");
        return items;
    }
    
    public SelectItem[] listaDeTiposDeContratacion(){
        return JsfUtil.getSelectItems(formularioVO.getTipoDeContratacion(), false);
    }
    
    public SelectItem[] listaDePuntosDeEncuentro(){
        return JsfUtil.getSelectItems(formularioVO.getPuntosDeEncuentro(), false);
    }

    public DesarrolloHumanoFacade getDesarrolloHumanoFacade() {
        return desarrolloHumanoFacade;
    }

    public void setDesarrolloHumanoFacade(DesarrolloHumanoFacade desarrolloHumanoFacade) {
        this.desarrolloHumanoFacade = desarrolloHumanoFacade;
    }
}
